import Request from 'luch-request'
import appConfig from '@/data/config.json'
import { useUserStore } from '@/stores'
import { useAppStore } from '@/stores/modules/app'

const http = new Request()

http.setConfig((config) => {
    /* config 为默认全局配置*/
    config.baseURL = 'http://10.0.0.26:30051' /* 根域名 */
    return config
})
http.interceptors.request.use(
    (config) => {
        // 可使用async await 做异步操作
        config.header = {
            ...config.header,
            token: useUserStore().token,
        }
        const custom = config.custom

        if (config.custom?.loading) {
            uni.showLoading()
        }

        if (config.method === 'POST') {
            if (config.data === undefined) {
                config.data = {}
            }
            config.data.appCode = appConfig.appCode
            config.data.tenantId = useAppStore().tenantId
            if (!config.custom?.ignoreToken) {
                config.data.token = useUserStore().token
            }
        }
        return config
    },
    (config) => {
        // 可使用async await 做异步操作
        return Promise.reject(config)
    }
)

// 响应拦截
http.interceptors.response.use(
    (response) => {
        /* 对响应成功做点什么 可使用async await 做异步操作*/
        const data = response.data
        // 自定义参数
        const custom = response.config.custom

        if (custom?.showLoading) uni.hideLoading()
        if (!data.success && data.code !== 0) {
            if (data.code < 0) {
                //exceptionLog(response,vm)
            }
            // 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
            if (custom?.toast !== false) {
                if (data.hasOwnProperty('message')) {
                    uni.showToast({
                        title: data.message,
                        icon: 'none',
                    })
                }
            }
            if (!custom?.catch) {
                // 如果不catch异常，自定义一些处理
                if (data.code === 10102) {
                }
            }
            return Promise.reject(data)
        }
        //分页
        if (data.rows) {
            data.data = {
                rows: data.rows,
                total: data.total,
            }
        }
        return data
    },
    (response) => {
        uni.hideLoading()
        if (response.statusCode === 500) {
            //exceptionLog(response,vm)
            const custom = response.config?.custom
            if (custom?.toast !== false) {
                uni.showToast({
                    title: '服务器无响应',
                    icon: 'none',
                })
            }
        }
        // 对响应错误做点什么 （statusCode !== 200）
        return Promise.reject(response)
    }
)

export default http
